/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package dao.implementacoes;

import dao.Conexao;
import dao.ImobiliariaDaoException;
import dao.ImovelDao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import model.Imovel;

/**
 *
 * @author suporte
 */
public class ImovelDaoImpl implements ImovelDao{

    private Connection conn;

    public ImovelDaoImpl() throws ImobiliariaDaoException{
        try{
            conn = Conexao.getConnection();
        }catch(Exception e){
            throw new ImobiliariaDaoException("Erro: " + e.getMessage());
        }
    }

    public void salvarImovel(Imovel imovel) throws ImobiliariaDaoException {
        PreparedStatement ps = null;
        ResultSet rs = null;
        Connection conn1 = null;
        if(imovel == null)
            throw new ImobiliariaDaoException("Nenhum Imovel foi Informado!");
        try{
            String sql = "INSERT INTO imovel VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
            conn1 = conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, imovel.getCodigo());
            ps.setString(2, imovel.getTipo_negocio());
            ps.setString(3, imovel.getTipo());
            ps.setString(4, imovel.getQuartos());
            ps.setString(5, imovel.getPreco());
            ps.setString(6, imovel.getComentario());

            ps.executeUpdate();

        }catch(SQLException e){
            throw new ImobiliariaDaoException("Erro ao inserir imovel " + e);
        }finally{
            Conexao.closeConnection(conn1, ps);
        }
    }

    public void atualizarImovel(Imovel imovel) throws ImobiliariaDaoException {
        PreparedStatement ps = null;
        Connection conn1 = null;
        if(imovel == null)
            throw new ImobiliariaDaoException("Nenhum imovel foi informado!");
        try{
            String sql = "UPDATE imovel SET tipo_negocio=?, tipo=?, quartos=?, preco=?, comentario=? " +
                    "WHERE codigo=?";
            conn1 = conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, imovel.getTipo_negocio());
            ps.setString(2, imovel.getTipo());
            ps.setString(3, imovel.getQuartos());
            ps.setString(4, imovel.getPreco());
            ps.setString(5, imovel.getComentario());
            ps.executeUpdate();
        }catch(SQLException e){
            throw new ImobiliariaDaoException("Erro ao atualizar dados do proprietario " + e);
        }finally{
            Conexao.closeConnection(conn1, ps);
        }
    }

    public void excImovel(Imovel imovel) throws ImobiliariaDaoException {
        PreparedStatement ps = null;
        Connection conn1 = null;
        if(imovel == null)
            throw new ImobiliariaDaoException("Nenhum imovel foi informado!");
        try{
            String sql = "DELETE FROM imovel WHERE codigo=?";
            conn1 = conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, imovel.getCodigo());
            ps.executeUpdate();
        }catch(SQLException e){
            throw new ImobiliariaDaoException("Erro ao deletar proprietario " + e);
        }finally{
            Conexao.closeConnection(conn1, ps);
        }
    }

    public Imovel procurarImovel(String codigo) throws ImobiliariaDaoException {
        PreparedStatement ps = null;
        ResultSet rs = null;
        Connection conn1 = null;
        if(codigo == null)
                throw new ImobiliariaDaoException("Nenhum codigo foi informado!");
        try{
            String sql = "SELECT * FROM imovel WHERE codigo=?";
            conn1 = conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, codigo);
            rs = ps.executeQuery();
            if(!rs.next())
                throw new ImobiliariaDaoException("Nenhum imovel encontrado!");
            String codigo1 = rs.getString("codigo");
            String tipo_negocio = rs.getString("tipo_negocio");
            String tipo = rs.getString("tipo");
            String quartos = rs.getString("quartos");
            String preco = rs.getString("preco");
            String comentario = rs.getString("comentario");
            Imovel imovel = new Imovel(codigo1, tipo_negocio, tipo, quartos, preco, comentario);
            return imovel;
        }catch(Exception e){
            throw new ImobiliariaDaoException("Erro ao procurar imovel " + e);
        }finally{
            Conexao.closeConnection(conn1, ps, rs);
        }
    }

    public List todosImoveis() throws ImobiliariaDaoException {
        PreparedStatement ps = null;
        ResultSet rs = null;
        Connection conn1 = null;
        try{
            String sql = "SELECT * FROM imovel";
            conn1 = conn;
            ps = conn1.prepareStatement(sql);
            rs = ps.executeQuery();
            List<Imovel> listaImovel = new ArrayList<Imovel>();
            while(rs.next()){
                String codigo = rs.getString("codigo");
                String tipo_negocio = rs.getString("tipo_negocio");
                String tipo = rs.getString("tipo");
                String quartos = rs.getString("quartos");
                String preco = rs.getString("preco");
                String comentario = rs.getString("comentario");
                listaImovel.add(new Imovel(codigo, tipo_negocio, tipo, quartos, preco, comentario));
            }
            return listaImovel;
        }catch(SQLException e){
            throw new ImobiliariaDaoException("Erro ao listar imoveis " + e);
        }finally{
            Conexao.closeConnection(conn1, ps, rs);
        }
    }

    public List procurarImoveis(Imovel imovel) throws ImobiliariaDaoException {
        PreparedStatement ps = null;
        ResultSet rs = null;
        Connection conn1 = null;
        if(imovel == null)
            throw new ImobiliariaDaoException("Nenhum imovel informado!");

        try{
            String sql = "SELECT * FROM imovel WHERE ";
            if(imovel.getCodigo() != null)
                sql += "codigo=" + imovel.getCodigo();
            if(imovel.getTipo_negocio() != null)
                sql += " tipo_negocio=" + imovel.getTipo_negocio();
            if(imovel.getTipo() != null)
                sql += " tipo=" + imovel.getTipo();
            if(imovel.getQuartos() != null)
                sql += " quartos=" + imovel.getQuartos();
            if(imovel.getPreco() != null)
                sql += " preco=" + imovel.getPreco();
            if(imovel.getComentario() != null)
                sql += " comentario=" + imovel.getComentario();

            conn1 = conn;
            ps = conn1.prepareStatement(sql);
            rs = ps.executeQuery();
            if(!rs.next())
                throw new ImobiliariaDaoException("Nenhum Imovel Encontrado!");
            List<Imovel> listaImoveisProc = new ArrayList<Imovel>();
            while(rs.next()){
                String codigo = rs.getString("codigo");
                String tipo_negocio = rs.getString("tipo_negocio");
                String tipo = rs.getString("tipo");
                String quartos = rs.getString("quartos");
                String preco = rs.getString("preco");
                String comentario = rs.getString("comentario");
                listaImoveisProc.add(new Imovel(codigo, tipo_negocio, tipo, quartos, preco, comentario));
            }
            return listaImoveisProc;
        }catch (SQLException e){
            throw new ImobiliariaDaoException("Erro ao procurar imoveis");
        }finally{
            Conexao.closeConnection(conn1, ps, rs);
        }
    }

}
